perm filename INTFAC.FAI[SYS,HE]5 blob sn#056765 filedate 1973-08-02 generic text, type T, neo UTF8
COMMENT ⊗   VALID 00007 PAGES 
RECORD PAGE   DESCRIPTION
 00001 00001
 00002 00002		TITLE INTFAC
 00003 00003		THIS IS THE 32 WORD MAIL MESSAGE
 00004 00004	PACK:	(INTEGER PTR,TIMEREFERENCE REAL SOLN)
 00005 00005	ISSERV:	0
 00007 00006	DOIT:	MOVE 1,-1(17)
 00008 00007	ACT:	HRLI MASTER
 00009 ENDMK
⊗;
	TITLE INTFAC
	INTERNAL DOIT,ARMPOS,ARM.JOINT,PACK
	INTERNAL HANDFN,ARMFN,ARMPROCEED
	EXTERNAL ARM.VECTOR,ARM.MOTION,ARM.STATUS,ARM.SEG
	EXTERNAL ARM.WAIT,FELT,STOP.ON,ARM.TO
	EXTERNAL ARM.MESSAGE

	P←17
	MASTER←←16660
	RELOC←←40
	TOUCH←←10
	HOLD←←20

ARM.JOINT:MOVEI 
	SKIPA
ARMPOS:	MOVEI 1
	HRLI MASTER
	MOVEM EXE
	CALLI 1,30
	MOVEM 1,SEGJOB
	JSR ISSERV
SEN1:	SEND REQU
	JRST[		MOVEI 1,2
			CALLI 1,31
			JRST SEN1]
	WRCV EXE
	MOVE 1,ARM.VE
	MOVEI 2,6(1)
	HRLI 1,THETA
	BLT 1,(2)
	MOVE 1,STATUS
	MOVEM 1,ARM.STATUS
RETN:	POPJ 17,

REQU:	SIXBIT/[ARM]/
	EXE

;	THIS IS THE 32 WORD MAIL MESSAGE

EXE:	XWD MASTER,0	;18-27 NARGS, 30 RELOC, 31 HOLD, 32 SOTCH, 33-35 EXE
			;0 READ IN OCTAL
			;1 READ IN DECIMAL
			;2 EXECUTE FILE
			;3 EXECUTE FUNCTION
FILE:	0
PPPN:	0
BAND:	0
SEGJOB:	0
NAME:	0
STATUS:	0
SEGMENT:0
NERVES:	0
ETOR:	0
THETA:	0
ARGS:	BLOCK =21

PACK:	;(INTEGER PTR,TIME;REFERENCE REAL SOLN);
	MOVE 10,-3(P)
	MOVE 1,-2(P)
	MOVEM 1,(10)	;TIME
	HRLZ 5,-1(P)
	BLT 5,4		;PICK UP A0-A4
	MOVM 6,4	;WHERE THE LARGEST WILL END UP
	MOVEI 5,3
L1:	MOVM 7,(5)
	CAMGE 6,7
	MOVE 6,7
	SOJGE 5,L1
	TDZ 6,[XWD 777,777777]	;THE LARGEST IS NOW IN 6
	ADD 6,[XWD  12000,0]	;THE EXPONENT TO PUT FRACTION AND SIGN INTO RT. HALF
	HLLM 6,-1(10)
	UFA 6,4
	HRLM 7,-3(10)
	UFA 6,3
	HRRM 7,-3(10)
	UFA 6,2
	HRLM 7,-2(10)
	UFA 6,1
	HRRM 7,-2(10)
	UFA 6,0
	HRRM 7,-1(10)
	SUB P,[XWD 4,4]
	JRST @4(P)

ISSERV:	0
SEE:	MOVE 1,[SIXBIT/[ARM]/]
	CALLI 1,400043
	JRST[	CAIE 1,1
		JRST[	OUTSTR[ASCIZ/THERE ARE TOO MANY SERVOS ALREADY
PLEASE KILL THEM ALL BUT ONE AND TYPE RET
/]
			INCHWL
			INCHWL
			JRST SEE]
		PTYGET 10
		JRST[	OUTSTR[ASCIZ/NO PTYS AVAILABLE
/]
			CALLI 12]
		HRLI 10,0
	GJ:	MOVEI 11,[ASCIZ/L
/]
		PTWRS7 10
	WH:	PTRD1W 10
		CAIE 11,"#"
		JRST[	CAIE 11,"?"
			JRST WH
			OUTSTR[ASCIZ\NO JOB FOR SERVO
TYPE C/R TO TRY AGAIN
\]
			INCHWL
			INCHWL
			JRST GJ]
		MOVEI 11,[ASCIZ/SYS,HE
/]
		PTWRS7 10
	WCC:	PTRD1W 10
		CAIE 11,"↑"
		JRST WCC
		MOVEI 11,[ASCIZ/RU ARM
/]
		PTWRS7 10
	WCC2:	PTRD1W 10
		CAIE 11,"!"
		JRST WCC2
		JRST @ISSERV]
GOTONE:	JRST @ISSERV

DOIT:	MOVE 1,-1(17)
	MOVEM 1,FILE
	MOVEM 1,ARM.WAIT
	MOVE 1,-2(17)
	HRRZM 1,BAND
	MOVEI 2
	SETZ 1,
	CALLI 1,24
	MOVEM 1,PPPN
	JSR ISSERV
	PUSHJ P,ACT
RETM:	SUB 17,[XWD 3,3]
	JRST @3(17)

ARMFN:	MOVEI 3+HOLD+RELOC
	HRL 1,ARM.ME
	HRRI 1,ARGS
	BLT 1,ARGS+24
	MOVE 1,-1(17)
	DPB 1,[POINT 9,0,26]
	PUSHJ P,ACT
	SUB P,[XWD 2,2]
	JRST @2(P)

HANDFN:	MOVEI 3+HOLD
	MOVE 1,ARM.ME
	MOVE 1,(1)
	MOVEM 1,ARGS
	JRST ACT

ARMPRO:	MOVE 1,-1(P)
	MOVEM 1,ARGS
	MOVEI 3
	PUSHJ P,ACT
	SUB P,[XWD 2,2]
	JRST @2(P)

ACT:	HRLI MASTER
	SETZM ARM.STATUS
	SKIPE STOP.ON
	TRO TOUCH
	MOVEM EXE
	MOVE 1,ARM.WAIT
	MOVEM 1,ARM.MOTION
	SETZM ARM.WAIT
	JSR ISSERV
 	SEND REQU
	JRST[		MOVEI 1,2
			CALLI 1,31
			JRST .-1]
	WRCV EXE
	MOVE 1,ARM.VE
	MOVEI 2,6(1)
	HRLI 1,THETA
	BLT 1,(2)
	MOVE 1,ARM.TO
	MOVEI 2,5(1)
	HRLI 1,ARGS+10
	BLT 1,(2)
	MOVE 1,ARM.MOTION
	MOVEM 1,ARM.WAIT
	SETZM ARM.MOTION
	MOVE 1,STATUS
	MOVEM 1,ARM.STATUS
	POPJ P,

	END